package com.huanf.controller;

import com.huanf.domain.User;
import com.huanf.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author: 35238
 * 功能: 使用官方提供的BaseMapper接口里面的方法
 * 时间: 2024-01-01 15:45
 */
@RestController
public class BaseController {

    @Autowired
    private UserMapper userMapper;

    //----------------------------------插入数据------------------------------------

    @GetMapping("/base1") //浏览器访问 http://localhost:8050/base1
    public String base1() {
        User user = new User();
        for (int i = 0; i < 10; i++) {
            user.setName("张三" + i);
            user.setAge(18);
            user.setEmail("张三@huanf.com");
            userMapper.insert(user);
        }
        return "插入数据成功 请查看数据库";
    }

    //---------------------------------查询所有数据----------------------------------

    @GetMapping("/base2") //浏览器访问 http://localhost:8050/base2
    public List<User> base2() {
        //查询全部，若没有条件，则可以null为参数
        List<User> list = userMapper.selectList(null);
        //forEach方法用于输出集合数据
        list.forEach(System.out::println);
        return list;
    }

    //---------------------------------根据id删除数据--------------------------------

    @GetMapping("/base3") //浏览器访问 http://localhost:8050/base3
    public String base3() {
        userMapper.deleteById(10);
        return "根据id删除(逻辑删除，原因: 在实体类添加了@TableLogic注解)数据成功 请查看数据库的逻辑删除字段";
    }

    //--------------------------------根据Map集合删除---------------------------------

    @GetMapping("/base4") //浏览器访问 http://localhost:8050/base4
    public String base4() {
        //由于deleteByMap方法需要一个Map集合作为参数，所以我们先创建一个Map集合
        Map<String,Object> map = new HashMap<>();
        map.put("user_name","张三8");//往集合里面添加参数，注意是键值对的形式。注意user_name是跟数据库那边一致，不是跟你实体类一致
        map.put("uid",9);
        //会删除user_name为张三8，并且uid为9的数据，注意是同时满足这两个条件才会被删除
        userMapper.deleteByMap(map);
        return "根据Map集合删除(逻辑删除，原因: 在实体类添加了@TableLogic注解)成功 请查看数据库的逻辑删除字段";
    }

    //--------------------------------根据id批量删除数据-------------------------------

    @GetMapping("/base5") //浏览器访问 http://localhost:8050/base5
    public String base5() {
        List<Long> list = Arrays.asList(8L, 7L);
        //删除id为8，7的数据
        userMapper.deleteBatchIds(list);
        //上面那行deleteByMap的返回值是受影响的行数
        return "根据id批量删除数据成功 请查看数据库";
    }

    //---------------------------------根据id修改数据---------------------------------

    @GetMapping("/base6") //浏览器访问 http://localhost:8050/base6
    public String base6() {
        User user = new User();
        user.setUid(6L);
        //修改id为1的数据
        user.setName("李四");
        user.setEmail("123@qq.com");
        userMapper.updateById(user);
        return "根据id修改数据成功 请查看数据库";
    }

    //--------------------------------根据id查询单个数据-------------------------------

    @GetMapping("/base7") //浏览器访问 http://localhost:8050/base7
    public User base7() {
        //查询id为6的数据
        User result = userMapper.selectById(6L);
        return result;
    }

    //--------------------------------根据id查询多个数据-------------------------------

    @GetMapping("/base8") //浏览器访问 http://localhost:8050/base8
    public List<User> base8() {
        List<Long> list = Arrays.asList(5L, 4L);
        //查看id为5，4的数据
        List<User> userList = userMapper.selectBatchIds(list);
        //输出之前用forEach方法，先对集合中的每一个数据进行循环并输出
        userList.forEach(System.out::println);
        return userList;
    }

    //--------------------------------根据Map集合查询数据------------------------------

    @GetMapping("/base9") //浏览器访问 http://localhost:8050/base9
    public List<User> base9() {
        //由于selectByMap方法需要一个Map集合作为参数，所以我们先创建一个Map集合
        Map<String,Object> map_duixiang = new HashMap<>();
        map_duixiang.put("user_name","李四");//注意user_name是跟数据库那边一致，不是跟你实体类一致
        map_duixiang.put("age",18);
        //上面两行表示查询的是user_name为李四，并且age为18的数据，注意是同时满足这两个条件才会被查询
        List<User> userList = userMapper.selectByMap(map_duixiang);
        userList.forEach(System.out::println);
        return userList;
    }
}
